/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Service;

import DB.Establecimiento;
import DB.HibernateUtil;
import DB.ProgramaMedicoFonasa;
import java.util.List;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author Jacqueline
 */
@WebService()
public class ProgramaFonasaWS {

    @WebMethod(operationName = "AgregarProgramaFonasa")
    public boolean agregarProgramaFonasa(@WebParam(name = "programa") ProgramaMedicoFonasa programa){                  
        return ControladorDeObjetos.saveObject(programa);
    }
    @WebMethod(operationName = "listarProgramasFonasa")
    public List<ProgramaMedicoFonasa> listarProgramasFonasa() {
        return ControladorDeObjetos.getAllObjectByClassType(ProgramaMedicoFonasa.class);
    }
    @WebMethod(operationName = "eliminarProgramaFonasa")
    public boolean eliminarProgramaFonasa(@WebParam(name = "Id") Long Id) {
       ProgramaMedicoFonasa programa = (ProgramaMedicoFonasa) ControladorDeObjetos.loadObjectByLongId(Id, ProgramaMedicoFonasa.class);
       ControladorDeObjetos.deleteObject(programa);
       return true;
    }
    @WebMethod(operationName = "modificarProgramaFonasa")
    public boolean modificarProgramaFonasa(@WebParam(name = "ProgramaMedico")ProgramaMedicoFonasa programa) {
        return ControladorDeObjetos.updateObject(programa);
    }    
    @WebMethod(operationName = "verificarProgramaFonasa")
    public boolean verificarProgramaFonasa(@WebParam(name = "numero")String numero) {
        Session s = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction trans = s.beginTransaction();
        Criteria c = s.createCriteria(ProgramaMedicoFonasa.class).add(Restrictions.eq("numeroPrograma", numero));
        if(c.list().isEmpty())
            return true;
        return false;
    }
    @WebMethod(operationName = "cargarProgramaFonasa")
    public Object cargarProgramaFonasa(@WebParam(name = "id") Long id) {        
        return ControladorDeObjetos.loadObjectByLongId(id, ProgramaMedicoFonasa.class);
    }    
    @WebMethod(operationName = "cargarProgramaFonasaPorNumero")
    public Object cargarProgramaFonasaPorNumero(@WebParam(name = "id") String numero) {        
        Session s = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction trans = s.beginTransaction();
        Criteria c = s.createCriteria(ProgramaMedicoFonasa.class).add(Restrictions.eq("numeroPrograma", numero));
        if(c.list().isEmpty())
            return null;
        return c.list().get(0);
    }    
    @WebMethod(operationName = "agregarEstablecimiento")
    public boolean agregarEstablecimiento(@WebParam(name = "establecimiento") Establecimiento establecimiento){                  
        return ControladorDeObjetos.saveObject(establecimiento);
    }
    @WebMethod(operationName = "cargarEstablecimiento")
    public Object cargarEstablecimiento(@WebParam(name = "rut") String rut){
        return ControladorDeObjetos.loadObjectByStringId(rut, Establecimiento.class);
    }
    @WebMethod(operationName = "eliminarEstablecimiento")
    public boolean eliminarEstablecimiento(@WebParam(name = "Id") Long Id) {
       Establecimiento establecimiento = (Establecimiento) ControladorDeObjetos.loadObjectByLongId(Id, Establecimiento.class);
       ControladorDeObjetos.deleteObject(establecimiento);
       return true;
    }
    @WebMethod(operationName = "filtrarProgramaFonasa")
    public List<ProgramaMedicoFonasa> filtrarProgramaFonasa(@WebParam(name = "buscar") String buscar) {
        
        Session s = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction trans = s.beginTransaction();
        Criteria c = s.createCriteria(ProgramaMedicoFonasa.class).add(
            Restrictions.or(
                Restrictions.or(
                    Restrictions.or(
                        Restrictions.ilike("numeroPrograma", "%" + buscar + "%"), 
                        Restrictions.ilike("rutAfiliado", "%" + buscar + "%")
                    ),
                    Restrictions.or(
                        Restrictions.ilike("rutPaciente", "%" + buscar + "%"), 
                        Restrictions.ilike("rutEstablecimiento", "%" + buscar + "%")
                    )
                ),
                Restrictions.or(
                    Restrictions.or(
                        Restrictions.ilike("fechaDesde", "%" + buscar + "%"), 
                        Restrictions.ilike("fechaHasta", "%" + buscar + "%")
                    ),
                    Restrictions.or(
                        Restrictions.ilike("rutProfesional", "%" + buscar + "%"),
                        Restrictions.ilike("diagnosticoProfesional", "%" + buscar + "%")
                    )
                )
            )
        );                
        List l = c.list();
        
        s.close();
        return l;
    }

    @WebMethod(operationName = "cambiarEstadoProgramaFonasa")
    public boolean cambiarEstadoProgramaFonasa(@WebParam(name = "idPrograma")String idPrograma, @WebParam(name = "pagado")boolean pagado) {
        ProgramaMedicoFonasa pmf = (ProgramaMedicoFonasa) cargarProgramaFonasaPorNumero(idPrograma);
        pmf.setPagado(pagado);
        return ControladorDeObjetos.updateObject(pmf);
    }
}